package com.mofum.miyi.facade.event.listener;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 事件监听器
 *
 * @author miyi
 */
public interface EventListener<Context> extends StartListener<Context>, EndListener<Context> {

    Logger logger = LoggerFactory.getLogger(EventListener.class);

    /**
     * 设置开始
     *
     * @param startListener 开始监听器
     */
    default void setStart(StartListener<Context> startListener) {

    }

    /**
     * 设置结束
     *
     * @param endListener 结束监听器
     */
    default void setEnd(EndListener<Context> endListener) {

    }

    /**
     * 开始
     *
     * @return 开始监听器
     */
    default StartListener<Context> getStartListener() {
        return new StartListener<Context>() {
        };
    }

    /**
     * 结束
     *
     * @return 结束监听器
     */
    default EndListener<Context> getEndListener() {
        return new EndListener<Context>() {
        };
    }

    /**
     * 开始
     *
     * @param context 上线文
     */
    @Override
    default void end(Context context) {
        if (logger.isDebugEnabled()) {
            logger.debug("execute end...");
        }

        this.getEndListener().end(context);

        if (logger.isDebugEnabled()) {
            logger.debug("execute end complete!");
        }
    }

    /**
     * 结束
     *
     * @param context 上线文
     */
    @Override
    default void start(Context context) {
        if (logger.isDebugEnabled()) {
            logger.debug("execute start...");
        }

        this.getStartListener().start(context);

        if (logger.isDebugEnabled()) {
            logger.debug("execute start complete!");
        }
    }
}
